gtk_hsv_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
- GtkHSV *hsv;
- HSVPrivate *priv;
-
- hsv = GTK_HSV (widget);
- priv = hsv->priv;
+ GtkHSV *hsv = GTK_HSV (widget);
+ HSVPrivate *priv = hsv->priv;
+ gint focus_width;
+ gint focus_pad;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
- requisition->width = priv->size;
- requisition->height = priv->size;
+ requisition->width = priv->size + 2 * (focus_width + focus_pad);
+ requisition->height = priv->size + 2 * (focus_width + focus_pad);
}
/* Size_allocate handler for the HSV color selector */
priv = hsv->priv;
- center = priv->size / 2.0;
+ center = GTK_WIDGET (hsv)->requisition.width / 2.0;
outer = priv->size / 2.0;
inner = outer - priv->ring_width;
angle = priv->h * 2.0 * G_PI;
priv = hsv->priv;
compute_triangle (hsv, &ihx, &ihy, &isx, &isy, &ivx, &ivy);
- center = priv->size / 2.0;
+ center = GTK_WIDGET (hsv)->requisition.width / 2.0;
hx = ihx - center;
hy = center - ihy;
sx = isx - center;
priv = hsv->priv;
- center = priv->size / 2.0;
+ center = GTK_WIDGET (hsv)->requisition.width / 2.0;
dx = x - center;
dy = center - y;
gint width,
gint height)
{
+ GtkWidget *widget = GTK_WIDGET (hsv);
HSVPrivate *priv;
int xx, yy;
gdouble dx, dy, dist;
GdkBitmap *mask;
GdkGC *gc;
GdkColor color;
+ gint focus_width;
+ gint focus_pad;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
priv = hsv->priv;
- center = priv->size / 2.0;
+ center = widget->requisition.width / 2.0;
outer = priv->size / 2.0;
inner = outer - priv->ring_width;
color.pixel = 1;
gdk_gc_set_foreground (gc, &color);
gdk_draw_arc (mask, gc, TRUE,
- -x, -y,
+ focus_width + focus_pad - x,
+ focus_width + focus_pad - y,
priv->size - 1, priv->size - 1,
0, 360 * 64);
color.pixel = 0;
gdk_gc_set_foreground (gc, &color);
gdk_draw_arc (mask, gc, TRUE,
- -x + priv->ring_width - 1, -y + priv->ring_width - 1,
+ focus_width + focus_pad - x + priv->ring_width - 1,
+ focus_width + focus_pad - y + priv->ring_width - 1,
priv->size - 2 * priv->ring_width + 1, priv->size - 2 * priv->ring_width + 1,
0, 360 * 64);
/* Draw ring outline */
- if (GTK_WIDGET_HAS_FOCUS (hsv) &&
- priv->focus_on_ring)
+ if (GTK_WIDGET_HAS_FOCUS (hsv) && priv->focus_on_ring)
{
- gint focus_width;
- gint focus_halfwidth;
- GdkGC *gc = gtk_hsv_get_focus_gc (hsv, &focus_width);
- focus_halfwidth = (focus_width + 1) / 2;
-
- gdk_draw_arc (drawable, gc, FALSE,
- -x + focus_width/2, -y + focus_width/2,
- priv->size - focus_width, priv->size - focus_width,
- 0, 360 * 64);
- gdk_draw_arc (drawable, gc, FALSE,
- -x + priv->ring_width - focus_halfwidth, -y + priv->ring_width - focus_halfwidth,
- priv->size - 2 * priv->ring_width + focus_width,
- priv->size - 2 * priv->ring_width + focus_width,
- 0, 360 * 64);
-
- g_object_unref (gc);
+ gtk_paint_focus (widget->style, drawable,
+ GTK_WIDGET_STATE (widget),
+ NULL, widget, NULL,
+ x, y, width, height);
}
}
gint width,
gint height)
{
+ GtkWidget *widget = GTK_WIDGET (hsv);
HSVPrivate *priv;
gint hx, hy, sx, sy, vx, vy; /* HSV vertices */
gint x1, y1, r1, g1, b1; /* First vertex in scanline order */
GdkColor color;
GdkPoint points[3];
gdouble r, g, b;
+ gchar *detail;
priv = hsv->priv;
/* Create clipping mask */
- mask = gdk_pixmap_new (GTK_WIDGET (hsv)->window, width, height, 1);
+ mask = gdk_pixmap_new (widget->window, width, height, 1);
gc = gdk_gc_new (mask);
g_free (buf);
- /* Draw triangle focus outline */
-
- if (GTK_WIDGET_HAS_FOCUS (hsv) &&
- !priv->focus_on_ring)
- {
- gint focus_width = 1;
- GdkGC *gc = gtk_hsv_get_focus_gc (hsv, &focus_width);
-
- gdk_draw_polygon (drawable, gc, FALSE, points, 3);
- g_object_unref (gc);
- }
-
/* Draw value marker */
xx = floor (sx + (vx - sx) * priv->v + (hx - vx) * priv->s * priv->v + 0.5) - x;
if (INTENSITY (r, g, b) > 0.5)
{
+ detail = "colorwheel_light";
color.red = 0x0000;
color.green = 0x0000;
color.blue = 0x0000;
}
else
{
+ detail = "colorwheel_dark";
color.red = 0xffff;
color.green = 0xffff;
color.blue = 0xffff;
#define OUTER_RADIUS 4
#define INNER_RADIUS 3
+#define FOCUS_RADIUS 6
gdk_draw_arc (drawable, priv->gc, FALSE,
xx - OUTER_RADIUS, yy - OUTER_RADIUS,
xx - INNER_RADIUS, yy - INNER_RADIUS,
INNER_RADIUS * 2, INNER_RADIUS * 2,
0, 360 * 64);
+
+ /* Draw focus outline */
+
+ if (GTK_WIDGET_HAS_FOCUS (hsv) &&
+ !priv->focus_on_ring)
+ {
+ gint focus_width;
+ gint focus_pad;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+
+ gtk_paint_focus (widget->style, drawable,
+ GTK_WIDGET_STATE (widget),
+ NULL, widget, detail,
+ xx - FOCUS_RADIUS - focus_width - focus_pad,
+ yy - FOCUS_RADIUS - focus_width - focus_pad,
+ 2 * (FOCUS_RADIUS + focus_width + focus_pad),
+ 2 * (FOCUS_RADIUS + focus_width + focus_pad));
+ }
+
}
/* Paints the contents of the HSV color selector */
style->white.blue = 0xffff;
gdk_colormap_alloc_color (style->colormap, &style->white, FALSE, TRUE);
- gc_values_mask = GDK_GC_FOREGROUND;
+ gc_values_mask = GDK_GC_FOREGROUND | GDK_GC_BACKGROUND;
gc_values.foreground = style->black;
+ gc_values.background = style->white;
style->black_gc = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
gc_values.foreground = style->white;
+ gc_values.background = style->black;
style->white_gc = gtk_gc_get (style->depth, style->colormap, &gc_values, gc_values_mask);
+ gc_values_mask = GDK_GC_FOREGROUND;
+
for (i = 0; i < 5; i++)
{
if (style->rc_style && style->rc_style->bg_pixmap_name[i])
gint8 *dash_list = "\1\1";
gint dash_len;
- gc = style->fg_gc[state_type];
-
if (widget)
{
gtk_widget_style_get (widget,
sanitize_size (window, &width, &height);
- if (area)
- gdk_gc_set_clip_rectangle (gc, area);
+ if (detail && !strcmp (detail, "colorwheel_light"))
+ gc = style->black_gc;
+ else if (detail && !strcmp (detail, "colorwheel_dark"))
+ gc = style->white_gc;
+ else
+ gc = style->fg_gc[state_type];
gdk_gc_set_line_attributes (gc, line_width,
dash_list[0] ? GDK_LINE_ON_OFF_DASH : GDK_LINE_SOLID,
GDK_CAP_BUTT, GDK_JOIN_MITER);
-
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, area);
if (detail && !strcmp (detail, "add-mode"))
{